Axios XSRF-TOKEN 취약성 업데이트
개요
2023/11/08 일자로 Axios v0.8.1 ~ v1.5.1 버전에서 XSRF-TOKEN이 X-XSRF-TOKEN 헤더에 포함되어 매 요청마다 보내져 공격자에게 보여질 수 있는 CVE가 공개되었습니다.
https://nvd.nist.gov/vuln/detail/CVE-2023-45857
해당 CVE는 axios 에서 패치를 하여 v1.6.0 버전에 배포 되었습니다.
v1.6.0: https://github.com/axios/axios/releases/tag/v1.6.0
따라서, 위의 CVE 문제를 피하기 위해서는 v1.6.0 버전 이상으로 axios를 업데이트 해야합니다.
왜 생긴걸까?
패치 PR의 변경점을 살펴봅시다.
// 기존 코드 const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName && cookies.read(config.xsrfCookieName); // 변경 후 코드 // regarding CVE-2023-45857 config.withCredentials condition was removed temporarily const xsrfValue = isURLSameOrigin(fullPath) && config.xsrfCookieName && cookies.read(config.xsrfCookieName);
https://github.com/axios/axios/pull/6028
기존에는 withCredentials
을 옵션에 사용하고 있다면 헤더에 포함시키고 있던 것을 알 수 있습니다.
이 문제를 피하기 위해 withCredentials
을 체크하는 로직을 제거했습니다.
추가된 방법
기존에 withCredentials
을 통해 자동으로 추가되던 것이 개발자가 숨겨진 사양을 알기 어려웠기에 v1.6.2 에서 withXSRFToken
이라는 옵션이 추가되었습니다.
https://github.com/axios/axios/releases/tag/v1.6.2
위의 CVE와 같은 결과가 되지만, 이 설정은 명시적으로 개발자에게 추가됨을 알리고 있게 됩니다.
따라서, 이와 같은 옵션이 필요하다면 v1.6.2으로 올려야 합니다.
XSRF-TOKEN 이 뭐길래
교차 사이트 요청 위조, Cross-Site Request Forgery, CSRF 혹은 XSRF 라 불리는 공격에 관련된 보안 토큰입니다.
공격자가 취약성이 있는 사이트에서 인증 cookie 를 받은 사용자를 공격용 사이트에서 취약성이 있는 사이트로 요청을 마음대로 할 수 있게 하는 공격입니다. 기존에 사용자가 가지고 있던 cookie가 자동으로 포함되게 되는 경우에 가능한 공격입니다.
이외의 자세한 설명은 아래의 링크를 참고해주세요.
https://learn.microsoft.com/ko-kr/aspnet/core/security/anti-request-forgery?view=aspnetcore-7.0
즉 위 처럼 문제가 생기는 경우는 인증에 cookie를 사용하고, 호스트는 다르지만 같은 도메인인 공유 호스팅 환경등에서 발생할 수 있습니다. 이와 같은 문제를 해결하기 위해 서버에서 XSRF-TOKEN 이라는 식별 가능한 토큰을 내려주게 되고, 사용자는 이 토큰을 포함해 요청하게 되어 보안을 강화할 수 있습니다.
위 내용을 통해 의도 하지 않게 XSRF-TOKEN 이 포함되어 요청이 되는 것이 왜 취약성인지 알 수 있습니다.
마무리
이러한 문제를 최대한 빠르게 대응 방법 및 내용에 대해 알기 위해서는 dependabot과 같은 취약성을 보고 해주는 툴들을 이용하고 있으면 좋습니다.
필자도 dependabot의 알림을 받아 알게되었습니다 🫣